package com.dc.toolkit.guava.base;

import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.junit.Assert;
import org.junit.Test;

import java.util.Objects;

/**
 * Description: Guava_Precondtions 断言测试类
 * @author: gdc
 * @date: 2021/4/17
 * @version 1.0
 */
@Slf4j
public class PrecondtionsTest {

    /**
     * 断言数据不能为空
     */
    @Test(expected = NullPointerException.class)
    public void testCheckNotNull(){
        Preconditions.checkNotNull(null);
    }

    /**
     * 断言数据不能为空,添加空 提示信息
     */
    @Test
    public void testCheckNotNullWithMessage(){
        try {
            Preconditions.checkNotNull(null, "数据不能为空");
        } catch (Exception e) {
            Assert.assertEquals(e.getMessage(), "数据不能为空");
        }
    }

    /**
     * 断言数据不能为空,添加空 格式化提示信息
     */
    @Test
    public void testCheckNotNullWithFormatMessage(){
        try {
            Preconditions.checkNotNull(Lists.newArrayList(), "这个列表数据大小必须为 %s", 2);
        } catch (Exception e) {
            Assert.assertEquals(e.getMessage(), "这个列表数据大小必须为 2");
        }
    }

    /**
     * 断言数据不能为空
     */
    @Test(expected = IllegalArgumentException.class)
    public void testCheckArgument(){
        Preconditions.checkArgument("A".equals("B"));
    }

    /**
     * 断言数据不能为空
     */
    @Test(expected = IllegalStateException.class)
    public void testCheckState(){
        int state = 200;
        Preconditions.checkState(400 == state, "这个状态无效");
    }

    /**
     * 断言数组越界异常
     */
    @Test(expected = IndexOutOfBoundsException.class)
    public void testElementIndex(){
        int listSize = 5;
        Preconditions.checkElementIndex(10, listSize);
    }

    /**
     * Objects 断言数据不能为空
     */
    @Test(expected = NullPointerException.class)
    public void testRequireNonNull_ByObjects(){
        Objects.requireNonNull(null);
    }
}
